/**
 * 认证服务
 * 处理用户登录、登出、token 管理等认证相关功能
 */

import api from './request';

/**
 * 登录凭证接口
 * 定义登录时需要的用户信息
 */
export interface LoginCredentials {
  /** 用户名 */
  username: string;
  /** 密码 */
  password: string;
  /** 是否记住登录状态 */
  remember?: boolean;
}

/**
 * 登录响应接口
 * 定义登录成功后返回的数据结构
 */
export interface LoginResponse {
  /** JWT token */
  token: string;
  /** 用户信息 */
  user: {
    /** 用户 ID */
    id: number;
    /** 用户名 */
    username: string;
    /** 用户邮箱 */
    email: string;
  };
}

/**
 * 认证服务对象
 * 提供认证相关的所有方法
 */
export const authService = {
  /**
   * 用户登录
   * @param credentials 登录凭证
   * @returns 登录响应数据
   */
  async login(credentials: LoginCredentials): Promise<LoginResponse> {
    const response = await api.post<LoginResponse>('/auth/login', credentials);
    return response.data;
  },

  /**
   * 用户登出
   * 清除本地存储的 token
   */
  async logout(): Promise<void> {
    await api.post('/auth/logout');
    localStorage.removeItem('token');
  },

  /**
   * 获取本地存储的 token
   * @returns token 字符串或 null
   */
  getToken(): string | null {
    return localStorage.getItem('token');
  },

  /**
   * 设置本地存储的 token
   * @param token JWT token
   */
  setToken(token: string): void {
    localStorage.setItem('token', token);
  },

  /**
   * 检查用户是否已认证
   * @returns 是否已认证
   */
  isAuthenticated(): boolean {
    return !!this.getToken();
  },
}; 